package com.example.friend.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;

import java.util.Properties;

@Configuration
@ConditionalOnProperty(prefix = "spring.mail", name = "host") // 当 spring.mail.host 存在时生效
class MailSenderPropertiesConfiguration {
    private final MailProperties properties;

    // 通过构造函数注入 MailProperties（已注册为 Bean，可直接注入）
    MailSenderPropertiesConfiguration(MailProperties properties) {
        this.properties = properties;
    }

    @Bean
    @ConditionalOnMissingBean
    public JavaMailSenderImpl mailSender() {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();

        // 从 MailProperties 中获取配置并设置到 sender
        sender.setHost(properties.getHost());       // SMTP 主机（必填）
        sender.setPort(properties.getPort());         // SMTP 端口（必填）
        sender.setUsername(properties.getUsername()); // 发件人邮箱（必填）
        sender.setPassword(properties.getPassword()); // 邮箱授权码（必填）

        // 设置默认编码（可选，但建议）
        sender.setDefaultEncoding(properties.getDefaultEncoding().name());

        // 设置其他 SMTP 参数（如 SSL/TLS，根据邮箱服务商要求）
        Properties smtpProperties = new Properties();
        if ("smtp".equals(properties.getProtocol())) {
            // 启用 SSL（QQ/163 邮箱需要）
            if (properties.getPort() == 465) {
                smtpProperties.put("mail.smtp.ssl.enable", "true");
            }
            // 启用 TLS（Gmail 等需要）
            else if (properties.getPort() == 587) {
                smtpProperties.put("mail.smtp.starttls.enable", "true");
            }
            // 启用认证（必须）
            smtpProperties.put("mail.smtp.auth", "true");
        }
        sender.setJavaMailProperties(smtpProperties);
        return sender;
    }
}